package com.lab.dto;

import lombok.Data;

import javax.validation.constraints.*;
import java.util.List;

/**
 * 周报表DTO（数据传输对象）
 * 用于创建或更新周报时，整合主表信息与内容列表的传输
 * 对应weekly_report表与weekly_report_content表的关联数据
 */
@Data
public class WeeklyReportDTO {



    @NotBlank(message = "用户名不能为空")
    private String username;

    /**
     * 角色类型（前端/后端/算法等）
     * 需与成员在member表中登记的role_type一致，确保数据一致性
     */
    @NotBlank(message = "角色类型不能为空")
    private String roleType;

    /**
     * 报表年份
     * 必须为有效的年份（如当前年份及前后合理范围，此处限制为2000-2100）
     */
    @NotNull(message = "报表年份不能为空")
    @Min(value = 2000, message = "年份不能早于2000年")
    @Max(value = 2100, message = "年份不能晚于2100年")
    private Integer reportYear;

    /**
     * 周数
     * 必须为1-52的有效周数（符合数据库表注释约束）
     */
    @NotNull(message = "周数不能为空")
    @Min(value = 1, message = "周数必须大于等于1")
    @Max(value = 52, message = "周数必须小于等于52")
    private Integer reportWeek;

    /**
     * 周报内容列表
     * 至少包含一条内容，每条内容需符合WeeklyReportContentDTO的约束
     */
    @NotNull(message = "周报内容列表不能为空")
    @Size(min = 1, message = "至少需包含一条周报内容")
    private List<WeeklyReportContentDTO> contents;



    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getRoleType() {
        return roleType;
    }

    public void setRoleType(String roleType) {
        this.roleType = roleType;
    }

    public Integer getReportYear() {
        return reportYear;
    }

    public void setReportYear(Integer reportYear) {
        this.reportYear = reportYear;
    }

    public Integer getReportWeek() {
        return reportWeek;
    }

    public void setReportWeek(Integer reportWeek) {
        this.reportWeek = reportWeek;
    }

    public List<WeeklyReportContentDTO> getContents() {
        return contents;
    }

    public void setContents(List<WeeklyReportContentDTO> contents) {
        this.contents = contents;
    }
}